/**
 * VERSION: 1.0
 * DATE: 10/18/2009
 * AS3
 * UPDATES AND DOCUMENTATION AT: http://www.TweenMax.com
 **/
package com.greensock.easing
{
	import flash.utils.Dictionary;
	import com.greensock.TweenLite;

	/**
	 * TweenMax (AS3 only) has built-in algorithms that speed up the processing of certain easing equations but in order
	 * to take advantage of those optimizations, you must activate the easing equations first (you only need to
	 * activate them ONCE in your swf). The following easing equations from the com.greensock.easing package are
	 * eligible for activation:
	 * <code>
	 * <ul>
	 *     	<li>Linear (easeIn, easeOut, easeInOut, and easeNone)</li>
	 * 		<li>Quad (easeIn, easeOut, and easeInOut)</li>
	 * 		<li>Cubic (easeIn, easeOut, and easeInOut)</li>
	 * 		<li>Quart (easeIn, easeOut, and easeInOut)</li>
	 * 		<li>Quint (easeIn, easeOut, and easeInOut)</li>
	 * 		<li>Strong (easeIn, easeOut, and easeInOut)</li>
	 * </ul><br />
	 * </code>
	 *
	 * <b>EXAMPLE</b><br /><br />
	 *
	 * <code>
	 * 		import com.greensock.easing.*;<br /><br />
	 *
	 * 		//activate the optimized ease classes<br />
	 * 		FastEase.activate([Strong, Linear, Quad]);<br /><br />
	 *
	 * 		//then tween as usual (you don't have to do anything special in your tweens)<br />
	 * 		TweenMax.to(mc, 2, {x:200, ease:Linear.easeNone});<br /><br />
	 * </code>
	 *
	 * Once activated, the easing calculations run about <b>35-80% faster!</b> Keep in mind that the easing calculations are only one small part
	 * of the tweening engine, so you may only see a 2-15% improvement overall depending on the equation and quantity of simultaneous tweens.
	 *
	 * Notes: <br />
	 * <ul>
	 * 		<li>TweenLite does <b>NOT</b> have the internal algorithms in place to take advantage of optimized eases at this time (to conserve file size).</li>
	 * 		<li>Activating an ease multiple times doesn't hurt or help</li>
	 * </ul>
	 *
	 * @param easeClasses An Array containing the easing classes to activate, like [Strong, Linear, Quad]. It will automatically activate the easeIn, easeOut, easeInOut, and (if available) easeNone easing equations for each class in the Array.
	 */
	public class FastEase
	{

		/**
		 * Normally you should use the <code>FastEase.activate()</code> method to activate optimized eases, but if you
		 * want to activate an ease that is NOT in the com.greensock.easing package (for example
		 * <code>fl.motion.easing.Quadratic</code>), you can register individual easing equations with
		 * this method. For example:
		 *
		 * <code>
		 * 		import fl.motion.easing.Quadratic;<br />
		 * 		import com.greensock.easing.FastEase;<br /><br />
		 *
		 * 		FastEase.activateEase(Quadratic.easeIn, 1, 1);
		 * </code>
		 *
		 * @param ease The easing equation (function) to activate. For example, Quadratic.easeIn
		 * @param type The type of ease (in, out, or inOut) where easeIn is 1, easeOut is 2, and easeInOut is 3.
		 * @param power The magnitude or power of the ease. For example, Linear is 0, Quad is 1, Cubic is 2, Quart is 3 and Quint and Strong are 4.
		 */
		public static function activateEase(ease:Function, type:int, power:uint):void
		{
			TweenLite.fastEaseLookup[ease]=[type, power];
		}

		/**
		 * TweenMax (AS3 only) has built-in algorithms that speed up the processing of certain easing equations but in order
		 * to take advantage of those optimizations, you must activate the easing equations first (you only need to
		 * activate them ONCE in your swf). The following easing equations from the com.greensock.easing package are
		 * eligible for activation:
		 * <code>
		 * <ul>
		 *     	<li>Linear (easeIn, easeOut, easeInOut, and easeNone)</li>
		 * 		<li>Quad (easeIn, easeOut, and easeInOut)</li>
		 * 		<li>Cubic (easeIn, easeOut, and easeInOut)</li>
		 * 		<li>Quart (easeIn, easeOut, and easeInOut)</li>
		 * 		<li>Quint (easeIn, easeOut, and easeInOut)</li>
		 * 		<li>Strong (easeIn, easeOut, and easeInOut)</li>
		 * </ul><br />
		 * </code>
		 *
		 * <b>EXAMPLE</b><br /><br />
		 *
		 * <code>
		 * 		import com.greensock.easing.*;<br /><br />
		 *
		 * 		FastEase.activate([Strong, Linear, Quad]);<br /><br />
		 * </code>
		 *
		 * Notes: <br />
		 * <ul>
		 * 		<li>TweenLite does <b>NOT</b> have the internal algorithms in place to take advantage of optimized eases at this time (to conserve file size).</li>
		 * 		<li>Activating an ease multiple times doesn't hurt or help</li>
		 * </ul>
		 *
		 * @param easeClasses An Array containing the easing classes to activate, like [Strong, Linear, Quad]. It will automatically activate the easeIn, easeOut, easeInOut, and (if available) easeNone easing equations for each class in the Array.
		 */
		public static function activate(easeClasses:Array):void
		{
			var i:int=easeClasses.length, easeClass:Object;
			while (i--)
			{
				easeClass=easeClasses[i];
				if (easeClass.hasOwnProperty("power"))
				{
					activateEase(easeClass.easeIn, 1, easeClass.power);
					activateEase(easeClass.easeOut, 2, easeClass.power);
					activateEase(easeClass.easeInOut, 3, easeClass.power);
					if (easeClass.hasOwnProperty("easeNone"))
					{
						activateEase(easeClass.easeNone, 1, 0);
					}
				}
			}
		}

	}
}


